/*
 * Zadanie 4B
 *
 * Napisz klasę Studenci której pojedynczy obiekt będzie przechowywał z góra zadaną liczbę wskaźników
 * na obiekty klasy Student. Definicja klasy powinna zawierać składową o nazwie studenci,
 * która będzie tablicą wskaźników na obiekty klasy Student. Ilość wskaźników definiowana jest przy
 * tworzeniu obiektu klasy Studenci. Poniższy program powinien zadziałać poprawnie.
 *
 * // utworzenie 3 elementowej kolekcji obiektów klasy Student
 * Studenci *s = new Studenci(3);
 * // utworzenie wskaźników na obiekty klasy Student i utworzenie nowych obiektów
 * Student *s1 = new Student("Adam", "Smyk", "82736372821", "s1020", 22, 1, true);
 * Student *s2 = new Student("Arnold", "Smyk", "82736372823", "s1021", 22, 1, true);
 * Student *s3 = new Student("Arnold", "Smyk", "82736372822", "s1031", 24, 1, false);
 *
 * // Wyświetlenie informacji o studentach
 * s1->show();
 * s2->show();
 * s3->show();
 *
 * // dodanie kopii obiektów klasy Student do kolekcji s
 * s->add(s1);
 * s->add(s2)->add(s3);
 *
 * // nie mamy więcej miejsca w kolekcji - błąd
 * s->add(s1);
 *
 * // wyświetlenie kolekcji
 * s->show();
 *
 * // usunięcie całej kolekcji
 * delete s;
 *
 * // Wyświetlenie informacji o studentach - to powinno zadziałać, bo przed chwilą usuneliśmy
 * // kolekcję s, w której były kopie obiektów
 * s1->show();
 * s2->show();
 * s3->show();
 *
 * // usunięcie obiektów klasy Student
 * delete s1;
 * delete s2;
 * delete s3;
 *
 * Czym różni się odwołanie
 *
 * s1.showDifferences(s1);
 *
 * z zadania 4A, od odwołania
 *
 * s1->show();
 *
 * z zadania 4B? Chodzi mi o to czym różni się symbol "." od symbolu "->".
 *
 * Podpowiedź:
 * Czym jest s1 w przypadku s1.showDifferences(s1); a czym jest s1 w przypadku s1->show();?
 *
 * Version: $Id: main.cpp 65 2011-11-26 09:11:55Z s8376@pjwstk.edu.pl $
 */
#include <iostream>
#include "Student.h"
#include "Studenci.h"

using namespace std;

int main(void)
{
    // utworzenie 3 elementowej kolekcji obiektów klasy Student
    Studenci *s = new Studenci(3);

    // utworzenie wskaźników na obiekty klasy Student i utworzenie nowych obiektów
    Student *s1 =
            new Student("Adam", "Smyk", "82736372821", "s1020", 22, 1, true);
    Student *s2 =
            new Student("Arnold", "Smyk", "82736372823", "s1021", 22, 1, true);
    Student *s3 =
            new Student("Arnold", "Smyk", "82736372822", "s1031", 24, 1, false);

    // Wyświetlenie informacji o studentach
    s1->show();
    s2->show();
    s3->show();

    // dodanie kopii obiektów klasy Student do kolekcji s
    s->add(s1);
    s->add(s2)->add(s3);

    // nie mamy więcej miejsca w kolekcji - błąd
    s->add(s1);

    // wyświetlenie kolekcji
    s->show();

    // usunięcie całej kolekcji
    delete s;

    // Wyświetlenie informacji o studentach - to powinno zadziałać, bo przed chwilą usuneliśmy
    // kolekcję s, w której były kopie obiektów
    s1->show();
    s2->show();
    s3->show();

    // usunięcie obiektów klasy Student
    delete s1;
    delete s2;
    delete s3;

    return 0;
}
